# os模块是一个python标准库里用于访问操作系统的模块（模块：xxx.py）
import os

# 获取当前文件的绝对路径
print(os.path.abspath(__file__))

# 加r是为了表示让当前字符串全部采用原字符(防止转义换行符的可能)
print(os.listdir(r"/"))           # 返回指定目录下的所有文件和文件夹名称，保存在列表中（浏览文件夹）

# 获取指定路径的目录名或文件名（进行分割,将文件目录与文件名分隔开）
print(os.path.split(r"/Project Resources/text.txt"))

# 分离文件拓展名(相对路径和绝对路径都可以)
print(os.path.splitext(r"/Project Resources/text.txt"))

# 获取当前文件的所在的目录（文件夹，绝对路径）
print(os.path.dirname(__file__))        # 类似print(os.getcwd())

# 判断输入路径是否为绝对路径
print(os.path.isabs(r"/text.txt"))

# 相对路径前面加../表示返回当前文件上一级,有几个../表示返几级
print(os.path.isabs(r"../../text.txt"))

# 通过文件的相对路径获得绝对路径
print(os.path.abspath("../text.txt"))

# 获取文件的大小，单位是字节
print(os.path.getsize(__file__))

# 创建文件夹
if not os.path.exists(r"D:\OK"):
    print(os.mkdir(r"D:\OK"))

# 只能删除空的文件夹
print(os.rmdir(r"D:\OK"))

# 删除文件
#print(os.remove("D:\图片\hhhhh.txt"))

# 切换目录，将当前文件工作目录切换到指定目录下
# 不会对文件进行任何移动或复制操作,它只影响程序运行时的当前工作目录
path = os.getcwd()
print(path)

f = os.chdir(r"E:\学习通")
print(f)

path = os.getcwd()
print(path)


# 删除指定文件夹
# route = r"E:\11111"
# file_list = os.listdir(route)     # ['新建 Microsoft Word 文档.docx', '新建 文本文档 (2).txt', '新建 文本文档.txt']
# for file in file_list:
#     route_1 = os.path.join(route,file)
#     os.remove(route_1)
# else:
#     os.rmdir(route)
# print("删除成功！")


# 将图片保存到当前文件夹（本地）
with open(r"D:\图片\三体图片.jpg","rb") as picture:
    vessel = picture.read()   # 读取文件内容

    file = picture.name
    filename = file[file.rfind("//")+1:]   # 截取文件名(也可以r=os.path.spilt(path),print(r[1])获得)

    path = os.path.dirname(__file__)
    path_1 = os.path.join(path,"三体图片.jpg")     # 返回的是一个拼接后的新路径，允许有多个参数

    with open(path_1,"wb") as w_picture:
        w_picture.write(vessel)


# 将一个文件夹内文件复制到另一个文件夹(里面没有文件夹)
scr_path = r"D:\原文件夹"
target_path = r"E:\目标文件夹"
# 封装函数
def copy(scr,target):
    if os.path.isdir(scr) and os.path.isdir(target):
        filelist = os.listdir(scr)      # ["材料1.txt"，""，""]

        for file in filelist:      # 材料1.txt

            way = os.path.join(scr,file)
            with open(way,"rb") as r_stream:        # 应付二进制数据（如图片）
               vessel = r_stream.read()

               way_1 = os.path.join(target,file)
               with open(way_1,"wb") as w_stream:
                   w_stream.write(vessel)
        else:
            print("复制完毕！")

copy(scr_path,target_path)

# 将一个文件夹内文件复制到另一个文件夹(里面有文件夹)
scr_path = r"D:\原文件夹"
target_path = r"E:\目标文件夹"

def copy_1(scr_path,target_path):
    # 获取文件夹里面内容
    filelist = os.listdir(scr_path)
    # 变量列表
    for file in filelist:
        # 拼接路径
        path = os.path.join(scr_path,file)
        # 判断是文件夹还是文件
        if os.path.isdir(path):
            # 递归调用copy_1
            target_path_1 = os.path.join(target_path,file)
            os.mkdir(target_path_1)
            copy_1(path,target_path)

        else:
            # 不是文件夹则直接进行复制
            with open(path, "rb") as rstream:  # 应付二进制数据（如图片）
                vessel = rstream.read()

                path_1 = os.path.join(target_path, file)
                with open(path_1, "wb") as wstream:
                    wstream.write(vessel)
    else:
         print("复制完成！")

# 调用copy_1
copy_1(scr_path,target_path)